<?php
class File extends Object {
	
	public static function extension($path) {
		$file = basename($path);
		if (strstr($file,".")!==false) {
			return substr(strrchr($file,"."),1);
		} else {
			return "";
		}
	}
	
	public static function mime($path) {
		$ext = self::extension($path);
		if (array_key_exists($ext,self::$mime)) {
			return self::$mime[$ext];
		} else {
			return "application/octet-stream";
		}
	}

	/**
	 * Find a file by recursively searching a folder
	 *
	 * @param string $fileName
	 * @param string $folder
	 * @return string The absolute path to the file or null if not found
	 */
	public static function find($fileName, $folder) {
		$filePath = null;
		
		foreach (glob($folder . "/*") as $path) {
			if (is_file($path) && basename($path)===$fileName) {
				$filePath = $path;
			}
		}
		
		if (!isset($filePath)) {
			foreach (glob($folder . "/*", GLOB_ONLYDIR) as $path) {
				$filePath = File::find($fileName, $path);
			}
		}
		
		return $filePath;
	}
	
	protected static $mime = array(
		"323"=>"text/h323",
		"acx"=>"application/internet-property-stream",
		"ai"=>"application/postscript",
		"aif"=>"audio/x-aiff",
		"aifc"=>"audio/x-aiff",
		"aiff"=>"audio/x-aiff",
		"asf"=>"video/x-ms-asf",
		"asr"=>"video/x-ms-asf",
		"asx"=>"video/x-ms-asf",
		"au"=>"audio/basic",
		"avi"=>"video/x-msvideo",
		"axs"=>"application/olescript",
		"bas"=>"text/plain",
		"bcpio"=>"application/x-bcpio",
		"bin"=>"application/octet-stream",
		"bmp"=>"image/bmp",
		"c"=>"text/plain",
		"cat"=>"application/vnd.ms-pkiseccat",
		"cdf"=>"application/x-cdf",
		"cer"=>"application/x-x509-ca-cert",
		"class"=>"application/octet-stream",
		"clp"=>"application/x-msclip",
		"cmx"=>"image/x-cmx",
		"cod"=>"image/cis-cod",
		"cpio"=>"application/x-cpio",
		"crd"=>"application/x-mscardfile",
		"crl"=>"application/pkix-crl",
		"crt"=>"application/x-x509-ca-cert",
		"csh"=>"application/x-csh",
		"css"=>"text/css",
		"dcr"=>"application/x-director",
		"der"=>"application/x-x509-ca-cert",
		"dir"=>"application/x-director",
		"dll"=>"application/x-msdownload",
		"dms"=>"application/octet-stream",
		"doc"=>"application/msword",
		"dot"=>"application/msword",
		"dvi"=>"application/x-dvi",
		"dxr"=>"application/x-director",
		"eps"=>"application/postscript",
		"etx"=>"text/x-setext",
		"evy"=>"application/envoy",
		"exe"=>"application/octet-stream",
		"fif"=>"application/fractals",
		"flr"=>"x-world/x-vrml",
		"flv"=>"video/x-flv",
		"gif"=>"image/gif",
		"gtar"=>"application/x-gtar",
		"gz"=>"application/x-gzip",
		"h"=>"text/plain",
		"hdf"=>"application/x-hdf",
		"hlp"=>"application/winhlp",
		"hqx"=>"application/mac-binhex40",
		"hta"=>"application/hta",
		"htc"=>"text/x-component",
		"htm"=>"text/html",
		"html"=>"text/html",
		"htt"=>"text/webviewhtml",
		"ico"=>"image/x-icon",
		"ief"=>"image/ief",
		"iii"=>"application/x-iphone",
		"ins"=>"application/x-internet-signup",
		"isp"=>"application/x-internet-signup",
		"jfif"=>"image/pipeg",
		"jpe"=>"image/jpeg",
		"jpeg"=>"image/jpeg",
		"jpg"=>"image/jpeg",
		"js"=>"application/x-javascript",
		"latex"=>"application/x-latex",
		"lha"=>"application/octet-stream",
		"lsf"=>"video/x-la-asf",
		"lsx"=>"video/x-la-asf",
		"lzh"=>"application/octet-stream",
		"m13"=>"application/x-msmediaview",
		"m14"=>"application/x-msmediaview",
		"m3u"=>"audio/x-mpegurl",
		"man"=>"application/x-troff-man",
		"mdb"=>"application/x-msaccess",
		"me"=>"application/x-troff-me",
		"mht"=>"message/rfc822",
		"mhtml"=>"message/rfc822",
		"mid"=>"audio/mid",
		"mny"=>"application/x-msmoney",
		"mov"=>"video/quicktime",
		"movie"=>"video/x-sgi-movie",
		"mp2"=>"video/mpeg",
		"mp3"=>"audio/mpeg",
		"mpa"=>"video/mpeg",
		"mpe"=>"video/mpeg",
		"mpeg"=>"video/mpeg",
		"mpg"=>"video/mpeg",
		"mpp"=>"application/vnd.ms-project",
		"mpv2"=>"video/mpeg",
		"ms"=>"application/x-troff-ms",
		"mvb"=>"application/x-msmediaview",
		"nws"=>"message/rfc822",
		"oda"=>"application/oda",
		"p10"=>"application/pkcs10",
		"p12"=>"application/x-pkcs12",
		"p7b"=>"application/x-pkcs7-certificates",
		"p7c"=>"application/x-pkcs7-mime",
		"p7m"=>"application/x-pkcs7-mime",
		"p7r"=>"application/x-pkcs7-certreqresp",
		"p7s"=>"application/x-pkcs7-signature",
		"pbm"=>"image/x-portable-bitmap",
		"pdf"=>"application/pdf",
		"pfx"=>"application/x-pkcs12",
		"pgm"=>"image/x-portable-graymap",
		"pko"=>"application/ynd.ms-pkipko",
		"pma"=>"application/x-perfmon",
		"pmc"=>"application/x-perfmon",
		"pml"=>"application/x-perfmon",
		"pmr"=>"application/x-perfmon",
		"pmw"=>"application/x-perfmon",
		"png"=>"image/png",
		"pnm"=>"image/x-portable-anymap",
		"pot"=>"application/vnd.ms-powerpoint",
		"ppm"=>"image/x-portable-pixmap",
		"pps"=>"application/vnd.ms-powerpoint",
		"ppt"=>"application/vnd.ms-powerpoint",
		"prf"=>"application/pics-rules",
		"ps"=>"application/postscript",
		"pub"=>"application/x-mspublisher",
		"qt"=>"video/quicktime",
		"ra"=>"audio/x-pn-realaudio",
		"ram"=>"audio/x-pn-realaudio",
		"ras"=>"image/x-cmu-raster",
		"rgb"=>"image/x-rgb",
		"rmi"=>"audio/mid",
		"roff"=>"application/x-troff",
		"rtf"=>"application/rtf",
		"rtx"=>"text/richtext",
		"scd"=>"application/x-msschedule",
		"sct"=>"text/scriptlet",
		"setpay"=>"application/set-payment-initiation",
		"setreg"=>"application/set-registration-initiation",
		"sh"=>"application/x-sh",
		"shar"=>"application/x-shar",
		"sit"=>"application/x-stuffit",
		"snd"=>"audio/basic",
		"spc"=>"application/x-pkcs7-certificates",
		"spl"=>"application/futuresplash",
		"src"=>"application/x-wais-source",
		"sst"=>"application/vnd.ms-pkicertstore",
		"stl"=>"application/vnd.ms-pkistl",
		"stm"=>"text/html",
		"svg"=>"image/svg+xml",
		"sv4cpio"=>"application/x-sv4cpio",
		"sv4crc"=>"application/x-sv4crc",
		"swf"=>"application/x-shockwave-flash",
		"t"=>"application/x-troff",
		"tar"=>"application/x-tar",
		"tcl"=>"application/x-tcl",
		"tex"=>"application/x-tex",
		"texi"=>"application/x-texinfo",
		"texinfo"=>"application/x-texinfo",
		"tgz"=>"application/x-compressed",
		"tif"=>"image/tiff",
		"tiff"=>"image/tiff",
		"tr"=>"application/x-troff",
		"trm"=>"application/x-msterminal",
		"tsv"=>"text/tab-separated-values",
		"txt"=>"text/plain",
		"uls"=>"text/iuls",
		"ustar"=>"application/x-ustar",
		"vcf"=>"text/x-vcard",
		"vrml"=>"x-world/x-vrml",
		"wav"=>"audio/x-wav",
		"wcm"=>"application/vnd.ms-works",
		"wdb"=>"application/vnd.ms-works",
		"wks"=>"application/vnd.ms-works",
		"wmf"=>"application/x-msmetafile",
		"wps"=>"application/vnd.ms-works",
		"wri"=>"application/x-mswrite",
		"wrl"=>"x-world/x-vrml",
		"wrz"=>"x-world/x-vrml",
		"xaf"=>"x-world/x-vrml",
		"xbm"=>"image/x-xbitmap",
		"xla"=>"application/vnd.ms-excel",
		"xlc"=>"application/vnd.ms-excel",
		"xlm"=>"application/vnd.ms-excel",
		"xls"=>"application/vnd.ms-excel",
		"xlt"=>"application/vnd.ms-excel",
		"xlw"=>"application/vnd.ms-excel",
		"xof"=>"x-world/x-vrml",
		"xpm"=>"image/x-xpixmap",
		"xwd"=>"image/x-xwindowdump",
		"z"=>"application/x-compress",
		"zip"=>"application/zip"
	);
	 
}
?>